#ifndef DATABASEMANAGE_H
#define DATABASEMANAGE_H

#include <QObject>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QMap>

#if _MSC_VER >=1600    // MSVC2015>1899,对于MSVC2010以上版本都可以使用
    #pragma execution_character_set("utf-8")
#endif

class DatabaseManage
{
public:

    /**
    * 单例方法
    * @brief getInstance
    * @return
    */
    static DatabaseManage* getInstance();

    /**
    * 初始化数据库
    * @brief initDatabase
    * @param username          数据库账号
    * @param password          数据库密码
    * @param databaseName      数据库名称
    * @param hostName          数据库地址
    * @param port              数据库端口号
    * @return
    */
    QSqlDatabase initDatabase(QString username, QString password, QString databaseName, QString hostName, int port = 3306);

    /**
    * 获取数据库
    * @brief getDatabase
    * @param hostName          数据库地址
    * @param port              数据库端口
    * @param databaseName      数据库名称
    * @return
    */
    QSqlDatabase getDatabase(QString hostName, int port, QString databaseName);

private:
    DatabaseManage();
    DatabaseManage(DatabaseManage &item);
    DatabaseManage& operator =(DatabaseManage &item);
    ~DatabaseManage();

    /**
    * key拼接字符串
    * @brief keyStr
    */
    QString keyStr = "host=%1,port=%2,databaseName=%3";

    /**
    * 数据库连接缓存
    * @brief dbMap
    */
    QMap<QString, QSqlDatabase> dbMap;

    /**
    * 初始化所有数据库连接
    * @brief initAllDatabaseConnect
    */
    void initAllDatabaseConnect();

    /**
    * 清空所有数据库连接
    * @brief cleanAllDatabaseConnect
    */
    void cleanAllDatabaseConnect();
};

#endif // DATABASEMANAGE_H

